/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.multi.client.account.service.controller;

import com.medusa.gruul.common.core.annotation.EscapeLogin;
import com.medusa.gruul.common.core.auth.model.constant.Headers;
import com.medusa.gruul.common.core.auth.model.enums.AuthPlatform;
import com.medusa.gruul.common.core.handler.Handler;
import com.medusa.gruul.common.core.helper.AccessToken;
import com.medusa.gruul.common.core.util.Result;
import com.medusa.gruul.common.core.util.SpringUtils;
import com.medusa.gruul.common.log.annotation.SysLog;
import com.medusa.gruul.multi.client.account.api.model.dto.AccountDataUpdateDTO;
import com.medusa.gruul.multi.client.account.api.model.dto.MobileEncryptDataDTO;
import com.medusa.gruul.multi.client.account.service.annotation.LoginHandle;
import com.medusa.gruul.multi.client.account.service.service.AccountService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 张治保
 * date 2021/11/29
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/multi/account")
public class MultiClientAccountController {

    private final AccountService accountService;

    @SysLog("统一登录")
    @EscapeLogin
    @PostMapping("/login/{id}")
    public Result<AccessToken> login(
        @PathVariable("id") String loginId,
        @RequestHeader(Headers.AUTH_PLATFORM) AuthPlatform loginType
    ){
        Handler<AccessToken> handler = SpringUtils.getBean(LoginHandle.class, loginType);
        return Result.ok(
            handler.handle(loginId)
        );
    }


    @GetMapping("/avatar")
    public Result<List<String>> availableAvatars(){
        return Result.ok(
            accountService.availableAvatars()
        );
    }

    @SysLog("更新用户信息")
    @PutMapping
    public Result<AccessToken> updateUserInfo(@RequestBody @Validated AccountDataUpdateDTO accountUpdateDTO,
                                              @RequestHeader(Headers.AUTH_PLATFORM) AuthPlatform loginType){
        return Result.ok(accountService.updateUserInfo(accountUpdateDTO,loginType));
    }

    @SysLog("更新小程序用户手机号")
    @PutMapping("/wechat/mini")
    public Result<Void> updateMiniUser(@RequestBody MobileEncryptDataDTO encryptData){
        accountService.updateWechatMobile(encryptData);
        return Result.ok();
    }
}
